Range: compareNode() method
Deprecated: This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.
Non-standard: This feature is not standardized. We do not recommend using non-standard features in production, as they have limited browser support, and may change or be removed. However, they can be a suitable alternative in specific cases where no standard option exists.
The compareNode()
method of the Range
interface returns a constant indicating the
position of the Node
.
Syntax
compareNode(referenceNode)
Parameters
referenceNode
-
The
Node
to compare with theRange
.
Return value
A constant indicating the position of the Node
. The possible values are:
NODE_BEFORE
(0
)-
Node starts before the Range
NODE_AFTER
(1
)-
Node ends after the Range
NODE_BEFORE_AND_AFTER
(2
)-
Node starts before and ends after the Range
NODE_INSIDE
(3
)-
Node starts after and ends before the Range, i.e., the Node is completely selected by the Range.
Examples
range = document.createRange();
range.selectNode(document.getElementsByTagName("div").item(0));
returnValue = range.compareNode(document.getElementsByTagName("p").item(0));
Notes
This method is non-standard. The following function can be used as replacement:
function rangeCompareNode(range, node) {
const nodeRange = node.ownerDocument.createRange();
try {
nodeRange.selectNode(node);
} catch (e) {
nodeRange.selectNodeContents(node);
}
const nodeIsBefore =
range.compareBoundaryPoints(Range.START_TO_START, nodeRange) === 1;
const nodeIsAfter =
range.compareBoundaryPoints(Range.END_TO_END, nodeRange) === -1;
if (nodeIsBefore && !nodeIsAfter) return 0;
if (!nodeIsBefore && nodeIsAfter) return 1;
if (nodeIsBefore && nodeIsAfter) return 2;
return 3;
}
Specifications
This method is not standard and therefore not part of any specification.